﻿using System;
using System.Collections;
using System.IO;
using System.Web;
using System.Web.UI;

namespace NWebMock
{
    public class HttpBrowserCapabilitiesWrapper : IHttpBrowserCapabilities
    {
        #region Constructors

        public HttpBrowserCapabilitiesWrapper(HttpBrowserCapabilities browser)
        {
            if (browser == null)
            {
                throw new ArgumentNullException("browser");
            }

            this.innerBrowser = browser;
        }

        #endregion

        #region Fields

        private HttpBrowserCapabilities innerBrowser = null;

        #endregion

        #region Properties

        public bool ActiveXControls { get { return this.innerBrowser.ActiveXControls; } }

        public bool AOL { get { return this.innerBrowser.AOL; } }

        public bool BackgroundSounds { get { return this.innerBrowser.BackgroundSounds; } }

        public bool Beta { get { return this.innerBrowser.Beta; } }

        public string Browser { get { return this.innerBrowser.Browser; } }

        public ArrayList Browsers { get { return this.innerBrowser.Browsers; } }

        public bool CanCombineFormsInDeck { get { return this.innerBrowser.CanCombineFormsInDeck; } }

        public bool CanInitiateVoiceCall { get { return this.innerBrowser.CanInitiateVoiceCall; } }

        public bool CanRenderAfterInputOrSelectElement { get { return this.innerBrowser.CanRenderAfterInputOrSelectElement; } }

        public bool CanRenderEmptySelects { get { return this.innerBrowser.CanRenderEmptySelects; } }

        public bool CanRenderInputAndSelectElementsTogether { get { return this.innerBrowser.CanRenderInputAndSelectElementsTogether; } }

        public bool CanRenderMixedSelects { get { return this.innerBrowser.CanRenderMixedSelects; } }

        public bool CanRenderOneventAndPrevElementsTogether { get { return this.innerBrowser.CanRenderOneventAndPrevElementsTogether; } }

        public bool CanRenderPostBackCards { get { return this.innerBrowser.CanRenderPostBackCards; } }

        public bool CanRenderSetvarZeroWithMultiSelectionList { get { return this.innerBrowser.CanRenderSetvarZeroWithMultiSelectionList; } }

        public bool CanSendMail { get { return this.innerBrowser.CanSendMail; } }

        public bool CDF { get { return this.innerBrowser.CDF; } }

        public Version ClrVersion { get { return this.innerBrowser.ClrVersion; } }

        public bool Cookies { get { return this.innerBrowser.Cookies; } }

        public bool Crawler { get { return this.innerBrowser.Crawler; } }

        public int DefaultSubmitButtonLimit { get { return this.innerBrowser.DefaultSubmitButtonLimit; } }

        public Version EcmaScriptVersion { get { return this.innerBrowser.EcmaScriptVersion; } }

        public bool Frames { get { return this.innerBrowser.Frames; } }

        public int GatewayMajorVersion { get { return this.innerBrowser.GatewayMajorVersion; } }

        public double GatewayMinorVersion { get { return this.innerBrowser.GatewayMinorVersion; } }

        public string GatewayVersion { get { return this.innerBrowser.GatewayVersion; } }

        public bool HasBackButton { get { return this.innerBrowser.HasBackButton; } }

        public bool HidesRightAlignedMultiselectScrollbars { get { return this.innerBrowser.HidesRightAlignedMultiselectScrollbars; } }

        public string HtmlTextWriter { get { return this.innerBrowser.HtmlTextWriter; } set { this.innerBrowser.HtmlTextWriter = value; } }

        public string Id { get { return this.innerBrowser.Id; } }

        public string InputType { get { return this.innerBrowser.InputType; } }

        public bool IsColor { get { return this.innerBrowser.IsColor; } }

        public bool IsMobileDevice { get { return this.innerBrowser.IsMobileDevice; } }

        public string this[string key] { get { return this.innerBrowser[key]; } }

        public bool JavaApplets { get { return this.innerBrowser.JavaApplets; } }

        public bool JavaScript { get { return this.innerBrowser.JavaScript; } }

        public Version JScriptVersion { get { return this.innerBrowser.JScriptVersion; } }

        public int MajorVersion { get { return this.innerBrowser.MajorVersion; } }

        public int MaximumHrefLength { get { return this.innerBrowser.MaximumHrefLength; } }

        public int MaximumRenderedPageSize { get { return this.innerBrowser.MaximumRenderedPageSize; } }

        public int MaximumSoftkeyLabelLength { get { return this.innerBrowser.MaximumSoftkeyLabelLength; } }

        public double MinorVersion { get { return this.innerBrowser.MinorVersion; } }

        public string MinorVersionString { get { return this.innerBrowser.MinorVersionString; } }

        public string MobileDeviceManufacturer { get { return this.innerBrowser.MobileDeviceManufacturer; } }

        public string MobileDeviceModel { get { return this.innerBrowser.MobileDeviceModel; } }

        public Version MSDomVersion { get { return this.innerBrowser.MSDomVersion; } }

        public int NumberOfSoftkeys { get { return this.innerBrowser.NumberOfSoftkeys; } }

        public string Platform { get { return this.innerBrowser.Platform; } }

        public string PreferredImageMime { get { return this.innerBrowser.PreferredImageMime; } }

        public string PreferredRenderingMime { get { return this.innerBrowser.PreferredRenderingMime; } }

        public string PreferredRenderingType { get { return this.innerBrowser.PreferredRenderingType; } }

        public string PreferredRequestEncoding { get { return this.innerBrowser.PreferredRequestEncoding; } }

        public string PreferredResponseEncoding { get { return this.innerBrowser.PreferredResponseEncoding; } }

        public bool RendersBreakBeforeWmlSelectAndInput { get { return this.innerBrowser.RendersBreakBeforeWmlSelectAndInput; } }

        public bool RendersBreaksAfterHtmlLists { get { return this.innerBrowser.RendersBreaksAfterHtmlLists; } }

        public bool RendersBreaksAfterWmlAnchor { get { return this.innerBrowser.RendersBreaksAfterWmlAnchor; } }

        public bool RendersBreaksAfterWmlInput { get { return this.innerBrowser.RendersBreaksAfterWmlInput; } }

        public bool RendersWmlDoAcceptsInline { get { return this.innerBrowser.RendersWmlDoAcceptsInline; } }

        public bool RendersWmlSelectsAsMenuCards { get { return this.innerBrowser.RendersWmlSelectsAsMenuCards; } }

        public bool RequiresAttributeColonSubstitution { get { return this.innerBrowser.RequiresAttributeColonSubstitution; } }

        public bool RequiresContentTypeMetaTag { get { return this.innerBrowser.RequiresContentTypeMetaTag; } }

        public bool RequiresControlStateInSession { get { return this.innerBrowser.RequiresControlStateInSession; } }

        public bool RequiresDBCSCharacter { get { return this.innerBrowser.RequiresDBCSCharacter; } }

        public bool RequiresHtmlAdaptiveErrorReporting { get { return this.innerBrowser.RequiresHtmlAdaptiveErrorReporting; } }

        public bool RequiresLeadingPageBreak { get { return this.innerBrowser.RequiresLeadingPageBreak; } }

        public bool RequiresNoBreakInFormatting { get { return this.innerBrowser.RequiresNoBreakInFormatting; } }

        public bool RequiresOutputOptimization { get { return this.innerBrowser.RequiresOutputOptimization; } }

        public bool RequiresPhoneNumbersAsPlainText { get { return this.innerBrowser.RequiresPhoneNumbersAsPlainText; } }

        public bool RequiresSpecialViewStateEncoding { get { return this.innerBrowser.RequiresSpecialViewStateEncoding; } }

        public bool RequiresUniqueFilePathSuffix { get { return this.innerBrowser.RequiresUniqueFilePathSuffix; } }

        public bool RequiresUniqueHtmlCheckboxNames { get { return this.innerBrowser.RequiresUniqueHtmlCheckboxNames; } }

        public bool RequiresUniqueHtmlInputNames { get { return this.innerBrowser.RequiresUniqueHtmlInputNames; } }

        public bool RequiresUrlEncodedPostfieldValues { get { return this.innerBrowser.RequiresUrlEncodedPostfieldValues; } }

        public int ScreenBitDepth { get { return this.innerBrowser.ScreenBitDepth; } }

        public int ScreenCharactersHeight { get { return this.innerBrowser.ScreenCharactersHeight; } }

        public int ScreenCharactersWidth { get { return this.innerBrowser.ScreenCharactersWidth; } }

        public int ScreenPixelsHeight { get { return this.innerBrowser.ScreenPixelsHeight; } }

        public int ScreenPixelsWidth { get { return this.innerBrowser.ScreenPixelsWidth; } }

        public bool SupportsAccesskeyAttribute { get { return this.innerBrowser.SupportsAccesskeyAttribute; } }

        public bool SupportsBodyColor { get { return this.innerBrowser.SupportsBodyColor; } }

        public bool SupportsBold { get { return this.innerBrowser.SupportsBold; } }

        public bool SupportsCacheControlMetaTag { get { return this.innerBrowser.SupportsCacheControlMetaTag; } }

        public bool SupportsCallback { get { return this.innerBrowser.SupportsCallback; } }

        public bool SupportsCss { get { return this.innerBrowser.SupportsCss; } }

        public bool SupportsDivAlign { get { return this.innerBrowser.SupportsDivAlign; } }

        public bool SupportsDivNoWrap { get { return this.innerBrowser.SupportsDivNoWrap; } }

        public bool SupportsEmptyStringInCookieValue { get { return this.innerBrowser.SupportsEmptyStringInCookieValue; } }

        public bool SupportsFontColor { get { return this.innerBrowser.SupportsFontColor; } }

        public bool SupportsFontName { get { return this.innerBrowser.SupportsFontName; } }

        public bool SupportsFontSize { get { return this.innerBrowser.SupportsFontSize; } }

        public bool SupportsImageSubmit { get { return this.innerBrowser.SupportsImageSubmit; } }

        public bool SupportsIModeSymbols { get { return this.innerBrowser.SupportsIModeSymbols; } }

        public bool SupportsInputIStyle { get { return this.innerBrowser.SupportsInputIStyle; } }

        public bool SupportsInputMode { get { return this.innerBrowser.SupportsInputMode; } }

        public bool SupportsItalic { get { return this.innerBrowser.SupportsItalic; } }

        public bool SupportsJPhoneMultiMediaAttributes { get { return this.innerBrowser.SupportsJPhoneMultiMediaAttributes; } }

        public bool SupportsJPhoneSymbols { get { return this.innerBrowser.SupportsJPhoneSymbols; } }

        public bool SupportsQueryStringInFormAction { get { return this.innerBrowser.SupportsQueryStringInFormAction; } }

        public bool SupportsRedirectWithCookie { get { return this.innerBrowser.SupportsRedirectWithCookie; } }

        public bool SupportsSelectMultiple { get { return this.innerBrowser.SupportsSelectMultiple; } }

        public bool SupportsUncheck { get { return this.innerBrowser.SupportsUncheck; } }

        public bool SupportsXmlHttp { get { return this.innerBrowser.SupportsXmlHttp; } }

        public bool Tables { get { return this.innerBrowser.Tables; } }

        public string Type { get { return this.innerBrowser.Type; } }

        public bool VBScript { get { return this.innerBrowser.VBScript; } }

        public string Version { get { return this.innerBrowser.Version; } }

        public Version W3CDomVersion { get { return this.innerBrowser.W3CDomVersion; } }

        public bool Win16 { get { return this.innerBrowser.Win16; } }

        public bool Win32 { get { return this.innerBrowser.Win32; } }

        #endregion

        #region Methods

        public HtmlTextWriter CreateHtmlTextWriter(TextWriter w)
        {
            return this.innerBrowser.CreateHtmlTextWriter(w);
        }

        public Version[] GetClrVersions()
        {
            return this.innerBrowser.GetClrVersions();
        }

        public bool IsBrowser(string browserName)
        {
            return this.innerBrowser.IsBrowser(browserName);
        }

        #endregion
    }
}
